package com.cskaoyan.javase.oop2._1extends._5protected._1two;
import com.cskaoyan.javase.oop2._1extends._5protected._0one.CurrentClazz;
import com.cskaoyan.javase.oop2._1extends._5protected._0one.SamePackageSonClazz;

/**
 * 不同包下的子类
 * protected访问权限意味着: 在不同包下,子类中可以访问它
 * 但是num是一个成员变量,需要先创建对象才能够访问
 * 那么这里创建对象访问num成员变量,有几种访问形式呢?有几种对象可以访问呢?
 *      1.直接创建父类对象,直接访问父类对象的num成员变量
 *          不能访问,访问不到,没有访问权限
 *
 *      2.直接子类自身对象,访问自身子类从父类当中继承过来的num成员变量
 *          可以访问
 *
 *      3.创建父类其它子类,相对于自身是"兄弟姐妹"类的对象
 *          然后访问它们继承父类的num成员变量
 *          也是不能访问的
 *
 * 以上总结,protected受保护的访问权限,所谓的"子类中可以访问"
 * 意味着:
 * 不同包下:
 *      必须在子类中,创建子类自身对象
 *      才能够访问子类自身从父类当中继承过来protected成员
 *
 * @since 17:03
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class AnotherPackageSonClazz extends CurrentClazz {
    public static void main(String[] args) {
        // 1.创建父类对象访问
        CurrentClazz cc = new CurrentClazz();
        // 'num' has protected access in 'com.cskaoyan.javase.oop2._1extends._5protected._0one.CurrentClazz'
        // System.out.println(cc.num);

        // 2.创建子类对象自身然后访问
        AnotherPackageSonClazz as = new AnotherPackageSonClazz();
        System.out.println(as.num);

        // 3.创建"兄弟姐妹"对象
        SamePackageSonClazz sc = new SamePackageSonClazz();
        // 'num' has protected access in 'com.cskaoyan.javase.oop2._1extends._5protected._0one.CurrentClazz'
        // System.out.println(sc.num);
    }

    public void test(){
        System.out.println(num);
    }
}
